//
//  MFAPMConfig.h
//  MFAPMManager
//
//  Created by zhang liyu on 2019/5/22.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@protocol MFAPMNetAOPProtocol, MFAPMAppLifeCircleProtocol;
@interface MFAPMConfig : NSObject

#pragma mark - Singleton

/**
 默认配置，包括从服务端请求到的配置数据，同init普通初始化配置
 
 @return 默认监控配置
 */
+ (instancetype)defaultConfigure;

#pragma mark - Fetch Config

/**
 是否开启监听功能 YES:开启 NO:关闭
 
 @default NO
 */
@property (nonatomic, readonly, assign) BOOL apmEnable;

/**
 是否开启网络监听功能 YES:开启 NO:关闭
 
 @default NO
 */
@property (nonatomic, readonly, assign) BOOL netErrorEnable;

/**
 是否开启崩溃监听功能 YES:开启 NO:关闭
 
 @default NO
 */
@property (nonatomic, readonly, assign) BOOL crashEnable;

/**
 是否开启截屏监听功能 YES:开启 NO:关闭
 
 @default NO
 */
@property (nonatomic, readonly, assign) BOOL screenshotEnable;

/**
 在程序开启监听时，进行配置项的请求操作
 
 @param complete 请求结束后的回调
 */
- (void)fetchSettingConfigWithComplete:(void (^)(void))complete;

#pragma mark - NetMonitor

/**
 网络监听拦截请求的白名单
 
 @default 从服务端获取到的默认列表，若为空则拦截全部请求
 */
@property (nonatomic, readonly, strong) NSArray<NSString *> *netMonitorWhiteHostArr;

/**
 拦截网络请求startLoading和stopLoading回调数组
 
 @return 默认需要接收回调的中间件，如截图中间件
 */
- (NSArray<MFAPMNetAOPProtocol> *)fetchNetMonitorURLProtocolInterceptors;

/**
 更新拦截网络请求startLoading和stopLoading回调数组
 
 @param interceptorsArr 更新的回调数组
 */
- (void)updateNetMonitorURLProtocolInterceptors:(NSArray<MFAPMNetAOPProtocol> *)interceptorsArr;

#pragma mark - ScreenShot Monitor

/**
 拦截截屏事件回调数组
 
 @return 默认需要接收回调的中间件
 */
- (NSArray *)fetchScreenShotInterceptors;

/**
 更新拦截截屏事件回调数组
 
 @param interceptorsArr 更新的回调数组 URL.scheme://URL.host形式的字符串数据
 */
- (void)updateScreenShotInterceptors:(NSArray *)interceptorsArr;

#pragma mark - Store Manager

/**
 本地上传队列缓存日志的条数
 @default 500条
 */
@property (nonatomic, readonly, assign) NSUInteger maxDiskCacheNUM;

/**
 上传统计日志的时间间隔
 @default 5分钟
 */
@property (nonatomic, readonly, assign) NSTimeInterval uploadInterval;

/**
 本地内存缓存日志的条数
 @default 100条
 */
@property (nonatomic, readonly, assign) NSUInteger maxMemoryCacheNUM;

/**
 单次上传最大事件条数
 
 @default 100条
 */
@property (nonatomic, readonly, assign) NSUInteger maxReportCount;

/**
 截屏上传图片最大尺寸，单位KB
 
 @default 30KB
 */
@property (nonatomic, readonly, assign) NSUInteger maxScreenShotUploadImgSize;

#pragma mark - App Life Circle

/**
 app生命周期回调数组
 
 @return 默认需要接收回调的中间件
 */
- (NSArray<MFAPMAppLifeCircleProtocol> *)fetchAppLifeCircleInterceptors;

/**
 更新app生命周期回调数组
 
 @param interceptorsArr 更新的回调数组 遵循app生命周期protocol的class
 */
- (void)updateAppLifeCircleInterceptors:(NSArray<MFAPMAppLifeCircleProtocol> *)interceptorsArr;

@end

NS_ASSUME_NONNULL_END
